package com.probiz.estore.product.service;

import java.util.List;
import java.util.Map;

import com.probiz.estore.common.model.product.Brand;
import com.probiz.estore.common.model.product.PriceInterval;
import com.probiz.estore.common.model.product.ProductType;
import com.probiz.estore.common.model.product.SkuOption;
import com.probiz.estore.core.service.GenericManager;
import com.probiz.estore.product.model.ProductTypeFullyModel;

/**
 * Manager interface for ProductType, responsible for business processing, and communicate between web and persistence layer.
 *
 */
public interface ProductTypeManager extends GenericManager<ProductType> {
	public static Short DELETE_STATUS_TRUE = 1;//物理删除成功
	public static Short DELETE_STATUS_FALSE = 0;//删除不成功,因为有存在该商品类型的商品

	/**
	 * 反回产品类别的价格区间
	 * 例如：1元到3000元 3000元到4999元 5000元以上
	 * 如果该类别没有设置价格区间属性，则系统根据该类别产品价格的最大值自动计算
	 * @param productType
	 * @return
	 */
	public List<PriceInterval> getPriceIntervalsByProductType(ProductType productType);
	
	/**
	 * 获得产品类型价格的最大值
	 * @param productTypeId
	 * @return
	 */
	public int getMaximumPriceByProductType(Integer productTypeId);
	
	 /**
     * 完全保存商品类型
     *
     * @param productTypeFullyModel 类型fullyModel
     * @return 返回参数
     */
    public Map<String, Object> saveFully(ProductTypeFullyModel productTypeFullyModel);
    
    /**
     * 完全删除商品类型
     * @param product
     * @return  
     * DELETE_STATUS_TRUE 物理删除成功
     * DELETE_STATUS_FALSE 删除不成功,因为有存在该商品类型的商品
     * 
     */
    public short deleteFully(Integer productTypeId);
    /**
     * 根据商品类型id获得关联的品牌
     * @param productTypeId
     * @return
     */
    public List<Brand> getRelatedBrand(Integer productTypeId);
    /**
     * 根据商品类型id获得关联的规格
     * @param productTypeId
     * @return
     */
    public List<SkuOption> getRelatedSkuOption(Integer productTypeId);
    
    /**
     * 根据商品类型名称获得商品类型实体
     * @param productTypeName 商品类型名称
     * @return 实体
     */
    public ProductType getProductTypeByName(String productTypeName);
    
    /**
     * 唯一性检查
     * @param productTypeName
     * @return
     */
    public boolean getIsProductTypeExist(String productTypeName);
	/**
	 * 是否有其他记录使用此类型名称
	 * @param productTypeName
	 * @param productTypeId
	 * @return
	 */
	public boolean getIsProductTypeNameUseByOthers(String productTypeName, Integer productTypeId);
}
